package demo1;

class MyCircularQueue {
    public int i ;
    public int j ;
    public boolean isFull = false;
      public int[] elem;
    public MyCircularQueue(int k) {
        this.elem = new int[k];
    }
    //向循环队列插入一个元素。如果成功插入则返回真。
    public boolean enQueue(int value) {
        if(isFull()){
            return false;
        }
        elem[j % elem.length] = value;
        j++;
        if((i%elem.length) == (j%elem.length)){
            isFull = true;
        }
        return true;
    }
    //从循环队列中删除一个元素。如果成功删除则返回真。
    public boolean deQueue() {
      if(isEmpty()){
          return false;
      }
              i++;
        isFull = false;
        return true;
    }
    //从队首获取元素。如果队列为空，返回 -1
    public int Front() {
     if(isEmpty()){
         return -1;
     }
     return elem[i%elem.length];
    }
    //获取队尾元素。如果队列为空，返回 -1 。
    public int Rear() {
      if(isEmpty()){
          return -1;
      }
      int val = (j-1) % elem.length;
      return elem[val];
    }
    //检查循环队列是否为空。
    public boolean isEmpty() {
      return !isFull && i%elem.length == j%elem.length;
    }
    //检查循环队列是否已满。
    public boolean isFull() {
       return isFull;
    }
}